package pojo.cadastro.operacional;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import pojo.operacional.VendaItem;

@Entity
@Table(name = "tbc_produto")
@NamedQueries({
    @NamedQuery(name = "Produto.listAll", query = "SELECT p FROM Produto p ORDER BY p.descricao"),
    @NamedQuery(name = "Produto.queryByDescricao", query = "SELECT p FROM Produto p WHERE p.descricao LIKE :descricaoPesq ORDER BY p.descricao")
})
public class Produto implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PRO_LON_ID")
    private long id;
    @Column(name = "PRO_TXT_DESC", length = 40, nullable = false)
    private String descricao;
    @Column(name = "PRO_DBL_VLR_COMPRA", nullable = false)
    private double valorCompra;
    @Column(name = "PRO_DBL_VLR_VENDA", nullable = false)
    private double valorVenda;
    @Column(name = "PRO_TXT_TAM", length = 3)
    private String tamanho;
    @Column(name = "PRO_DTA_CAD", nullable = false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataCadastro;

    @ManyToOne
    @JoinColumn(name = "MAR_LON_ID", nullable = false)
    private Marca marca;

    @OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
    private List<VendaItem> vendaItems;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "produto", fetch=FetchType.EAGER)
    private Estoque estoque;

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Marca getMarca() {
        return marca;
    }

    public void setMarca(Marca marca) {
        this.marca = marca;
    }

    public String getTamanho() {
        return tamanho;
    }

    public void setTamanho(String tamanho) {
        this.tamanho = tamanho;
    }

    public double getValorCompra() {
        return valorCompra;
    }

    public void setValorCompra(double valorCompra) {
        this.valorCompra = valorCompra;
    }

    public double getValorVenda() {
        return valorVenda;
    }

    public void setValorVenda(double valorVenda) {
        this.valorVenda = valorVenda;
    }

    public List<VendaItem> getVendaItems() {
        return vendaItems;
    }

    public void setVendaItems(List<VendaItem> vendaItems) {
        this.vendaItems = vendaItems;
    }

    public Estoque getEstoque() {
        return estoque;
    }

    public void setEstoque(Estoque estoque) {
        this.estoque = estoque;
    }
}
